package br.uniriotec.pssgbd.unterhaltung.model.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.uniriotec.pssgbd.unterhaltung.model.entidade.Temperatura;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaEstabelecimento.Bairro;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaEstabelecimento.Endereco;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaEstabelecimento.Estabelecimento;

public class EstabelecimentoDAO extends GenericDAO{
	
	private String sqlSelect = "SELECT cnpj, cod_bairro, nome_estab, nome_end, lograd, compl, num_end, cep FROM estab_ender";	
	private String sqlSelect1 = "SELECT cnpj, cod_bairro, nome_estab, nome_end, lograd, compl, num_end, cep FROM estab_ender WHERE cnpj = ?";
	public String getSqlSelect() {
		return sqlSelect;
	}
	
	
	public Estabelecimento obterEstabelecimento(String sqlWhere)throws ClassNotFoundException, SQLException{
		this.criaConexao(false);

		PreparedStatement stmt = null;
		ResultSet rs = null;
		Estabelecimento estab = new Estabelecimento();
		Endereco endereco = new Endereco();
		Bairro bairro = new Bairro();
		List <Estabelecimento> listaEstabelecimentos = new ArrayList <Estabelecimento> ();
		
		try{			
			stmt = getConnection().prepareStatement(sqlSelect1);
			rs = stmt.executeQuery();
			if (rs.next()){		
				
				bairro.setCodBairro(rs.getInt("cod_bairro"));
				
				endereco.setNome(rs.getString("nome_end"));
				endereco.setLogradouro(rs.getString("lograd"));
				endereco.setNumero(rs.getInt("num_end"));
				endereco.setComplemento(rs.getString("compl"));
				endereco.setCEP(rs.getString("cep"));
				endereco.setBairro(bairro);
				
				estab.setCNPJ(rs.getInt("cnpj"));
				estab.setEndereco(endereco);
				estab.setNome(rs.getString("nome_estab"));
								
			}
		}

		catch(SQLException e){
			throw e;
		}

		finally{
			try{
				stmt.close();
				rs.close();
				this.fechaConexao();
			} 
			catch (SQLException e) {
				throw e;
			}
		}
		
		return estab;
	}

	public Estabelecimento obterEstabelecimento(int cnpj_estab)throws ClassNotFoundException, SQLException{
		this.criaConexao(false);

		PreparedStatement stmt = null;
		ResultSet rs = null;
		Estabelecimento estab = new Estabelecimento();
		Endereco endereco = new Endereco();
		Bairro bairro = new Bairro();
		
		try{			
			stmt = getConnection().prepareStatement(sqlSelect1);
			stmt.setInt(1, cnpj_estab);
			rs = stmt.executeQuery();
			if (rs.next()){		
				
				bairro.setCodBairro(rs.getInt("cod_bairro"));
				
				endereco.setNome(rs.getString("nome_end"));
				endereco.setLogradouro(rs.getString("lograd"));
				endereco.setNumero(rs.getInt("num_end"));
				endereco.setComplemento(rs.getString("compl"));
				endereco.setCEP(rs.getString("cep"));
				endereco.setBairro(bairro);
				
				estab.setCNPJ(rs.getInt("cnpj"));
				estab.setEndereco(endereco);
				estab.setNome(rs.getString("nome_estab"));
								
			}
		}

		catch(SQLException e){
			throw e;
		}

		finally{
			try{
				stmt.close();
				rs.close();
				this.fechaConexao();
			} 
			catch (SQLException e) {
				throw e;
			}
		}
		
		return estab;
	}
	
	
	public List<Estabelecimento> obterEstabelecimentos() throws ClassNotFoundException, SQLException{
		this.criaConexao(false);

		PreparedStatement stmt = null;
		ResultSet rs = null;
		List<Estabelecimento> listaEstabelecimentos = new ArrayList<Estabelecimento>();
		Endereco endereco = new Endereco();
		Bairro bairro = new Bairro();
		

		try{
			stmt = getConnection().prepareStatement(sqlSelect);
			rs = stmt.executeQuery();
			if (rs.next()){				
				Estabelecimento estabelecimento = new Estabelecimento();
				
				bairro.setCodBairro(rs.getInt("cod_bairro"));
				
				endereco.setNome(rs.getString("nome_end"));
				endereco.setLogradouro(rs.getString("lograd"));
				endereco.setNumero(rs.getInt("num_end"));
				endereco.setComplemento(rs.getString("compl"));
				endereco.setCEP(rs.getString("cep"));
				endereco.setBairro(bairro);
				
				estabelecimento.setCNPJ(rs.getInt("cnpj"));
				estabelecimento.setEndereco(endereco);
				estabelecimento.setNome(rs.getString("nome_estab"));
				
				listaEstabelecimentos.add(estabelecimento);
			}
		}

		catch(SQLException e){
			throw e;
		}

		finally{
			try{
				stmt.close();
				rs.close();
				this.fechaConexao();
			} 
			catch (SQLException e) {
				throw e;
			}
		}

		return listaEstabelecimentos;
	}
	
	
	public List<Estabelecimento> obterEstabelecimentos(String SqlWhere) throws ClassNotFoundException, SQLException{
		this.criaConexao(false);

		PreparedStatement stmt = null;
		ResultSet rs = null;
		List<Estabelecimento> listaEstabelecimentos = new ArrayList<Estabelecimento>();
		Endereco endereco = new Endereco();
		Bairro bairro = new Bairro();
		

		try{
			stmt = getConnection().prepareStatement(sqlSelect + " " + SqlWhere);
			rs = stmt.executeQuery();
			if (rs.next()){				
				Estabelecimento estabelecimento = new Estabelecimento();
				
				bairro.setCodBairro(rs.getInt("cod_bairro"));
				
				endereco.setNome(rs.getString("nome_end"));
				endereco.setLogradouro(rs.getString("lograd"));
				endereco.setNumero(rs.getInt("num_end"));
				endereco.setComplemento(rs.getString("compl"));
				endereco.setCEP(rs.getString("cep"));
				endereco.setBairro(bairro);
				
				estabelecimento.setCNPJ(rs.getInt("cnpj"));
				estabelecimento.setEndereco(endereco);
				estabelecimento.setNome(rs.getString("nome_estab"));
				
				listaEstabelecimentos.add(estabelecimento);
			}
		}

		catch(SQLException e){
			throw e;
		}

		finally{
			try{
				stmt.close();
				rs.close();
				this.fechaConexao();
			} 
			catch (SQLException e) {
				throw e;
			}
		}

		return listaEstabelecimentos;
	}
}